//
//  main.m
//  内存管理作业
//
//  Created by dllo on 16/7/12.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Province.h"
#import "City.h"
#import "Distric.h"
#import "TimeCity.h"
int main(int argc, const char * argv[]) {
    
//    1.使用MRC, 重写用类处理的两个省市区。加入对应内存管理。
//    2.复习Objective-C语言的基本特性
    
#if 0
    
    NSString *locationPath = @"/Users/dllo/Downloads/Province-City-zone/Province-City-zone/area.txt";
    NSString *source = [NSString stringWithContentsOfFile:locationPath encoding:NSUTF8StringEncoding error:nil];
    //        NSLog(@"%@",source);
    NSArray *allLocationArray = [source componentsSeparatedByString:@","];
    
//    NSLog(@"%@",allLocationArray);
    
    NSMutableArray *allCityDicArray = [NSMutableArray array];
    for (NSString *city in allLocationArray) {
        // 根据每个城市的|处理字符串,重新生成字典的数组
        NSArray *arrayCity = [city componentsSeparatedByString:@"|"];
        NSMutableDictionary *cityDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:[arrayCity firstObject], @"cityName",[arrayCity lastObject], @"cityNumber", nil];
        [allCityDicArray addObject:cityDic];
        [arrayCity release];
    }
    // NSSortDescriptor 可以直接用在数组上,也可以用在(数组套字典的键值对"key"或者"value"上排序,非常方便)
    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"cityNumber" ascending:YES];
    [allCityDicArray sortUsingDescriptors:@[sort]];
    [sort release];
    NSMutableArray *fiallyArray = [NSMutableArray array];
    for (NSMutableDictionary *cityDic in allCityDicArray) {
        NSString *cityNumber = cityDic[@"cityNumber"];
        if ([cityNumber hasSuffix:@"0000"]) {
            // 以自身字典生成新的字典,不是直接赋值,而是开辟新的空间初始化
            NSMutableDictionary *proDic = [NSMutableDictionary dictionaryWithDictionary:cityDic];
            // 添加新的键值对,放市组
            [proDic setObject:[NSMutableArray array] forKey:@"cityArray"];
            [fiallyArray addObject:proDic];
            [cityNumber release];
        } else if ([cityNumber hasSuffix:@"00"]) {
            NSMutableArray *cityArray = [[fiallyArray lastObject] objectForKey:@"cityArray"];
            NSMutableDictionary *dicCity = [NSMutableDictionary dictionaryWithDictionary:cityDic];
            [dicCity setObject:[NSMutableArray array] forKey:@"districArray"];
            [cityArray addObject:dicCity];
        } else {
            // 注意代码尽量分开写
            NSMutableDictionary *proDic = [fiallyArray lastObject];
            NSMutableArray *cityArray = proDic[@"cityArray"];
            NSMutableDictionary *dicCity = [cityArray lastObject];
            NSMutableArray *districArray = dicCity[@"districArray"];
            NSMutableDictionary *districDic = [NSMutableDictionary dictionaryWithDictionary:cityDic];
            [districArray addObject:districDic];
        }
    }
    NSLog(@"%@",fiallyArray);
//    [fiallyArray release];
#endif

    
#if 0

    NSString *locationPath = @"/Users/dllo/Downloads/Province-City-zone/Province-City-zone/Location1.txt";
    NSString *source = [NSString stringWithContentsOfFile:locationPath encoding:NSUTF8StringEncoding error:nil];
    //     NSLog(@"%@",source);
    NSArray *allLocationArray = [source componentsSeparatedByString:@","];
    NSMutableArray *allCityDicArray = [NSMutableArray array];
    for (NSString *cityString in allLocationArray) {
        NSArray *city = [cityString componentsSeparatedByString:@"|"];
        // firstObject 对数组越界醉了优化,不会报错只会返回空值,比array[0] 好
        TimeCity *timeCity = [[TimeCity alloc] initWithName:[city firstObject] cityNumber:[city lastObject]];
        [allCityDicArray addObject:timeCity];
        [timeCity release];
    }
    
    // 排序
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"cityNumber" ascending:YES];
    [allCityDicArray sortUsingDescriptors:@[sortDescriptor]];
    [sortDescriptor release];
    
    //         NSLog(@"%@",allCityDicArray);
    NSMutableArray *finallArray = [NSMutableArray array];
    //            NSLog(@"%@",allCityDicArray);
    for (TimeCity *timeCity in allCityDicArray) {
        if ([timeCity.cityNumber hasSuffix:@"0000"]) {
            Province *pro = [Province districWithTimeCity:timeCity];
            [finallArray addObject:pro];
            //                 NSLog(@"%@",finallArray);
        } else if ([timeCity.cityNumber hasSuffix:@"00"]) {
            Province *pro = [finallArray lastObject];
            City *city = [City districWithTimeCity:timeCity];
            [pro.arr addObject:city];
//            NSLog(@"%@",finallArray);
        } else {
            Province *pro = [finallArray lastObject];
            City *city = [pro.arr lastObject];
            Distric *distrc = [Distric districWithTimeCity:timeCity];
            [city.arr addObject:distrc];
        }
    }
            NSLog(@"%@",finallArray);
    
#endif

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    return 0;
}
